# -*- coding: utf-8 -*-
"""
Flask应用初始化
提供Web界面和API接口
"""

from flask import Flask, render_template, jsonify, request, redirect, url_for
from common.logger import get_logger
from common.config import config
from .routes import app_system_routes, prompt_routes, alarm_strategy_routes

logger = get_logger(__name__)


def create_app():
    """
    创建Flask应用
    
    Returns:
        Flask应用实例
    """
    app = Flask(__name__)
    
    # 配置应用
    app.config['SECRET_KEY'] = 'your-secret-key-here'
    app.config['JSON_AS_ASCII'] = False
    
    # 注册路由
    register_routes(app)
    
    # 注册错误处理器
    register_error_handlers(app)
    
    logger.info("Flask应用初始化完成")
    return app


def register_routes(app):
    """
    注册路由
    
    Args:
        app: Flask应用实例
    """
    # 主页
    @app.route('/')
    def index():
        """主页"""
        return render_template('index.html')
    
    # 系统状态
    @app.route('/status')
    def status():
        """系统状态页面"""
        return render_template('status.html')
    
    # 日志查看
    @app.route('/logs')
    def logs():
        """日志查看页面"""
        return render_template('logs.html')
    
    # 分析结果
    @app.route('/analysis')
    def analysis():
        """分析结果页面"""
        return render_template('analysis.html')
    
    # 告警记录
    @app.route('/alarms')
    def alarms():
        """告警记录页面"""
        return render_template('alarms.html')
    
    # 注册子模块路由
    app.register_blueprint(app_system_routes.bp, url_prefix='/app-system')
    app.register_blueprint(prompt_routes.bp, url_prefix='/prompt')
    app.register_blueprint(alarm_strategy_routes.bp, url_prefix='/alarm-strategy')
    
    logger.info("路由注册完成")


def register_error_handlers(app):
    """
    注册错误处理器
    
    Args:
        app: Flask应用实例
    """
    @app.errorhandler(404)
    def not_found(error):
        """404错误处理"""
        if request.path.startswith('/api/'):
            return jsonify({'error': 'API endpoint not found'}), 404
        return render_template('404.html'), 404
    
    @app.errorhandler(500)
    def internal_error(error):
        """500错误处理"""
        logger.error(f"内部服务器错误: {error}")
        if request.path.startswith('/api/'):
            return jsonify({'error': 'Internal server error'}), 500
        return render_template('500.html'), 500
    
    @app.errorhandler(Exception)
    def handle_exception(error):
        """通用异常处理"""
        logger.error(f"未处理的异常: {error}")
        if request.path.startswith('/api/'):
            return jsonify({'error': 'An unexpected error occurred'}), 500
        return render_template('error.html', error=str(error)), 500


def run_app():
    """运行Flask应用"""
    app = create_app()
    
    host = config.get('web.host', '0.0.0.0')
    port = config.get('web.port', 5000)
    debug = config.get('web.debug', False)
    
    logger.info(f"启动Web服务: {host}:{port}")
    app.run(host=host, port=port, debug=debug)


if __name__ == '__main__':
    run_app() 